package com.sl.carcode.view;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v7.widget.AppCompatImageView;
import android.util.AttributeSet;

import com.sl.carcode.global.MyApplication;


/**
 * 自定义的圆角矩形ImageView，可以直接当组件在布局中使用。
 *
 * @author se7en
 */
public class RoundImageView extends AppCompatImageView {
//    private Paint mPaintBitmap = new Paint(Paint.ANTI_ALIAS_FLAG);
//      private Bitmap mRawBitmap;
//      private BitmapShader mShader;
//      private Matrix mMatrix = new Matrix();
//
//    public RoundImageView(Context context, AttributeSet attrs) {
//                super(context, attrs);
//            }
//
//            @Override
//     protected void onDraw(Canvas canvas) {
//                 Bitmap rawBitmap = getBitmap(getDrawable());
//        if (rawBitmap != null){
//            int viewWidth = getWidth();
//                        int viewHeight = getHeight();
//                         int viewMinSize = Math.min(viewWidth, viewHeight);
//                         float dstWidth = viewMinSize;
//                         float dstHeight = viewMinSize;
//                         if (mShader == null || !rawBitmap.equals(mRawBitmap)){
//                                 mRawBitmap = rawBitmap;
//                                mShader = new BitmapShader(mRawBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
//                           }
//                     if (mShader != null){
//                               mMatrix.setScale(dstWidth / rawBitmap.getWidth(), dstHeight / rawBitmap.getHeight());
//                                mShader.setLocalMatrix(mMatrix);
//                            }
//                         mPaintBitmap.setShader(mShader);
//                        float radius = viewMinSize / 2.0f;
//                       canvas.drawCircle(radius, radius, radius, mPaintBitmap);
//                    } else {
//                          super.onDraw(canvas);
//                   }
//          }
//
//             private Bitmap getBitmap(Drawable drawable){
//               if (drawable instanceof BitmapDrawable){
//                        return ((BitmapDrawable)drawable).getBitmap();
//                  } else if (drawable instanceof ColorDrawable){
//                        Rect rect = drawable.getBounds();
//                        int width = rect.right - rect.left;
//                    int height = rect.bottom - rect.top;
//                         int color = ((ColorDrawable)drawable).getColor();
//                        Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
//                          Canvas canvas = new Canvas(bitmap);
//                        canvas.drawARGB(Color.alpha(color), Color.red(color), Color.green(color), Color.blue(color));
//                       return bitmap;
//                    } else {
//                        return null;
//                    }
//            }
// }

    private Paint paint;

    public RoundImageView(Context context) {
        this(context, null);
    }

    public RoundImageView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public RoundImageView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        paint = new Paint();
    }

    /**
     * 绘制圆角矩形图片
     *
     * @author se7en
     */
    @Override
    protected void onDraw(Canvas canvas) {

        Drawable drawable = getDrawable();
        if (null != drawable) {
            Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap();
            Bitmap b = getRoundBitmap(bitmap, 20);
            final Rect rectSrc = new Rect(0, 0, b.getWidth(), b.getHeight());
            final Rect rectDest = new Rect(0, 0, getWidth(), getHeight());
            paint.reset();
            canvas.drawBitmap(b, rectSrc, rectDest, paint);

        } else {
            super.onDraw(canvas);
        }
    }

    /**
     * 获取圆角矩形图片方法
     *
     * @param bitmap
     * @param roundDp 这个属性是设置弧度
     * @return se7en
     */
    private Bitmap getRoundBitmap(Bitmap bitmap, int roundDp) {
        int roundPx = MyApplication.dip2px(roundDp);
        Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
                bitmap.getHeight(), Config.ARGB_8888);
        Canvas canvas = new Canvas(output);

        final int color = 0xff424242;

        final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
        final RectF rectF = new RectF(rect);
        paint.setAntiAlias(true);
        canvas.drawARGB(0, 0, 0, 0);
        paint.setColor(color);
        int x = bitmap.getWidth();

        canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
        paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN));
        canvas.drawBitmap(bitmap, rect, rect, paint);
        return output;
    }
}
